home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / MacOS 8 Resources / Developer Tools / Mac OS 8 Interfaces & Libraries / Interfaces / IDLIncludes / AdminMessagePort.idl < prev    next >
Text File  |  1996-05-01  |  3KB  |  117 lines

  1. /*
  2.      File:        AdminMessagePort.idl
  3.  
  4.      Contains:    xxx put contents here xxx
  5.  
  6.      Version:    Technology:    xxx put the technology version here xxx
  7.                  Release:    Universal Interfaces 3.0d3 on Copland DR1
  8.  
  9.      Copyright:    © 1984-1996 by Apple Computer, Inc.  All rights reserved.
  10.  
  11.      Bugs?:        If you find a problem with this file, send the file and version
  12.                  information (from above) and the problem description to:
  13.  
  14.                      Internet:    apple.bugs@applelink.apple.com
  15.                      AppleLink:    APPLE.BUGS
  16.  
  17. */
  18. #ifndef __ADMINMESSAGEPORT_IDL__
  19. #define __ADMINMESSAGEPORT_IDL__
  20.  
  21. #include <somobj.idl>
  22. #include <somcls.idl>
  23.  
  24. #ifndef __TYPES_IDL__
  25. #include <Types.idl>
  26. #endif
  27.  
  28. #ifdef __SOMIDL__
  29.  
  30. #if FOR_SYSTEM8_PREEMPTIVE
  31. /*
  32. //------------------------------------------------------------------------------------
  33.  
  34.     The I/O system reserves one bit of the Kernel message system's type mask to use
  35.     for administration messages. Different services within the I/O system use this
  36.     single message type. The routine and constants described in this file are used
  37.     by clients of these administration services to distinguish between the different
  38.     types.
  39.     
  40.     It is intended that clients of I/O administration services use a single Kernel 
  41.     message port (PortID) for all messages: administration and data. Clients can
  42.     create multiple message objects (ObjectID) for the same port and pass a different
  43.     object to each administration service and use another for data handling.
  44.     
  45.     The client should use separate tasks to receive administration messages and data
  46.     messages. Use the message type parameter of ReceiveMessage as a bit-mask to specify
  47.     the type of message to receive in each task. The code below shows an example of an
  48.     administration task.
  49.     
  50.     AdministrationTask()
  51.     {
  52.         MessageControlBlock    mcb;
  53.         union {
  54.             DevNMessage        devn;
  55.             PMMessage        pm;
  56.             Arbitration        arb;
  57.         } adminBuffer;
  58.         UInt32                messageType;
  59.  
  60.         while (true) 
  61.         {
  62.             ReceiveMessageSync(adminPort, kAMPMessageTypeMask, &mcb, &adminBuffer, ...)
  63.             AMPGetMessageType(mcb->messageContents, &messageType);
  64.             
  65.             switch (messageType)
  66.             {
  67.                 case kAMPDeviceNotificationMsg:
  68.                     {
  69.                         DevNMessage* devn = mcb.messageContents;
  70.                         switch (devn->subMessageType)
  71.                         {
  72.                             ...
  73.                         }
  74.                     }
  75.                     break;
  76.                 case kAMPPowerManagementMsg:
  77.                     {
  78.                         PMMessage* pm = mcb.messageContents;
  79.                         switch (pm->type)
  80.                         {
  81.                             ...
  82.                         }
  83.                     }
  84.                     break;
  85.                 case kAMPArbitrationServiceMsg:
  86.                     {
  87.                         Arbitration* arb = mcb.messageContents;
  88.                         switch (arb->type)
  89.                         {
  90.                             ...
  91.                         }
  92.                     }
  93.                     break;
  94.                 default:
  95.                     break;
  96.             }
  97.         }
  98.     }
  99.  
  100. //------------------------------------------------------------------------------------
  101. */
  102. /*    Constants for use in ReceiveMessage.*/
  103. /*    Constants returned by AMPGetMessageType*/
  104. /*
  105.     AMPGetMessageType:
  106.  
  107.     Given an I/O administration message this routine determines the type of 
  108.     message. If the type cannot be deteremined zero is returned and debugging 
  109.     builds throw an assertion.
  110. */
  111. #endif
  112.  
  113. #endif /* __SOMIDL__ */
  114.  
  115. #endif /* __ADMINMESSAGEPORT_IDL__ */
  116.  
  117.